package MAIN;
//笔试强训第7天

//选择题

/*final如果指向一个引用，这个引用所指向的对象是不能被改变的，但是这个实力的属性是可以改变的*/
/*访问修饰限定符修饰接口的只能是public，别的都是不可以的*/
/*Math.round这个函数表示四舍五入，以一个int或者是long类型来输出*/
/*一个类中的成员或者方法被static修饰后表示的是类方法或者类属性，多个实例对象会公用
* 一份类方法或者类属性，因为类成员或者类方法只有一份*/
/*clone，finalize，toString都属于object类的方法，hasNext是属于Iterator
* 接口的方法*/
/*Java使用的字符码集是Unicode，ASCII：对特殊字符，0-9，大小写字母进行编码
* BCD：针对数字进行编码*/

import java.util.Scanner;
import java.util.Stack;

/*编程题*/
public class Main7 {
    //合法括号序列判断（先出现的左括号和最后出现的右括号匹配，所以用合适的数据结构：栈）
    public boolean chkParenthesis(String A, int n) {
        // write code here
        //1.首先判断n是否是偶数，如果不是偶数一定是非法的字符串
        if (n % 2 != 0) return false;
        Stack<Character> stack = new Stack<>();
        for (char a : A.toCharArray()) {//变成一个字符数组
            if (a == '(') {
                stack.push(a);
            }else if (a == ')') {
                if (stack.isEmpty()) {
                    //栈是空的，右括号就出现了，此时一定是非法的
                    return false;
                }else if (stack.peek() == '(') {
                    //如果是左括号就匹配上了，此时弹出元素即可。
                    stack.pop();
                }
            }else {
                //出现的字符串是非法的
                return false;
            }
        }
        return stack.isEmpty();
    }

    public static void main(String[] args) {
        //求一个数变成斐波那契数的最小步数
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int f1 = 0;
        int f2 = 1;
        while (f2 < n) {
            int f3 = f1 + f2;
            f1 = f2;
            f2 = f3;
        }
        //当斐波那契数比N大了，此时right = fn；left = fn的前一项
        int right = f2;
        int left = f1;
        int a = n - left;
        int b = right - n;
        System.out.println(Math.min(a,b));
    }
}
